package reflect;

public class LiLun {
    /*
        反射机制
            反射API
                对象实例化
                    Class的成员方法newInstance()：
                        该方法使用类的默认构造器实例化。
                        类必须提供公开的无参构造器。
                        Class cls = Class.forName("java.util.ArrayList");
                        Object o = cls.newInstance(); //new ArraysList();
                        System.out.println(o);
                    JDK9开始，该方法标记为废方法，不再使用
                        实例化如果出现异常，该方法抛出的异常是固定的，无法提供足够的信息来诊断问题。
                        如果一个类没有公开且无参构造器时则无法使用，否则有可能影响类的封装性等安全问题。
                        可通过构造器实例化Constructor类来进行类似操作。

                Constructor类
                    获取指定的构造器
                        Class提供了getConstructor方法可获取其表示的类的制定构造器
                            public Constructor<T> getConstructor(Class<?>... parameterTypes)
                    Constructor-构造器对象
                        构造器对象是常用的反射对象之一。
                        该类的没一个实例用于表示一个构造器。
                    newInstance()方法
                        实例化的参数为构造器的实参
                            public T newInstance(Object...initargs)

                Method类
                    Class提供了获取其表示的类中方法的相关操作
                                方法                                              作用
                        Method[] getMethod()                                获取类对象表示类的所有公开方法（含超类继承）
                        Method getMethod(String name,Class...paraTypes)     获取类对象表示类的指定公开方法（含超类继承）
                        Method[] getDeclareMethods()                        获取类对象表示类的所有本类方法（含私有方法）
                        Method getDeclaredMethod(String n,Class...paras)    获取类对象表示类的指定本类方法
                    Method类的每一个实例用于表示一个方法
                        Method是反射对象之一。
                        Method实例是通过类对象获取一个类中方法的操作得到的。
                    Class提供的getMethod()可以获取一个类所有公开方法。
                        Method[] getMethods()
                        不含私有方法
                        包含从超类继承的方法
                    Method提供了获取其表示方法的信息操作以及方法调用
                            方法                                       作用
                        String getName()                            获取方法名称
                        int getModifiers()                          获取方法修饰符
                        int getParameterCount()                     获取方法参数个数
                        Class getReturnType()                       获取方法返回值类型
                        Class[] getParameterTypes()                 获取方法的参数类型
                        Object invoke(Object obj,Object...args)     执行该方法并获取返回值（如果有）
                    Method类可以调用其表示的方法
                        Object invoke(Object obj,Object...args)
                        参数1：该方法的所属对象。
                        参数2：该方法的实参列表。
                        返回值表示方法执行的结果，因为可能是任何类型，则其类型为Object，调用没有返回值的方法则返回值为null。
                        当被调用方法执行出现异常时候抛出InvocationTargetException。


     */


}















